import os
import pandas as pd
import logging
from tqdm import tqdm
from parse_word_to_excel import process_document, setup_logging, FIELDS

def process_directory(directory_path, output_file):
    """
    遍历指定目录，处理所有Word文档
    
    Args:
        directory_path: 要处理的目录路径
        output_file: 输出Excel文件路径
    """
    # 设置日志
    setup_logging("process_directory.log")
    
    # 检查目录是否存在
    if not os.path.exists(directory_path):
        logging.error(f"目录不存在: {directory_path}")
        return
    
    logging.info(f"开始处理目录: {directory_path}")
    
    # 获取所有Word文档
    doc_files = []
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            if file.endswith('.doc') or file.endswith('.docx'):
                doc_files.append(os.path.join(root, file))
    
    if not doc_files:
        logging.warning(f"在目录 {directory_path} 中未找到Word文档")
        return
    
    logging.info(f"找到 {len(doc_files)} 个Word文档")
    
    # 处理每个文档
    results = []
    for file_path in tqdm(doc_files, desc="处理文档"):
        try:
            logging.info(f"处理文件: {file_path}")
            result = process_document(file_path)
            
            # 检查结果是否为空
            is_empty = True
            for field in result:
                if field != "检测结果" and field != "备注" and result[field]:
                    is_empty = False
                    break
            
            if is_empty:
                logging.warning(f"文件 {file_path} 解析结果为空")
                # 添加文件名作为应用名称，以便于识别
                result["应用名称"] = os.path.basename(file_path).split('.')[0]
                result["备注"] = "解析失败，请手动检查"
            
            # 输出解析结果
            logging.info(f"解析结果: {result}")
            
            # 添加到结果列表
            results.append(result)
            logging.info(f"成功处理: {file_path}")
        except Exception as e:
            logging.error(f"处理文件 {file_path} 时出错: {str(e)}")
            import traceback
            logging.error(traceback.format_exc())
    
    if not results:
        logging.error("未能成功解析任何文档")
        return
    
    # 创建DataFrame并保存为Excel
    df = pd.DataFrame(results)
    
    # 确保所有列都存在
    for field in FIELDS:
        if field not in df.columns:
            df[field] = ""
    
    # 重新排序列
    df = df[FIELDS]
    
    # 确保输出目录存在
    output_dir = os.path.dirname(output_file)
    if output_dir and not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 保存到Excel
    try:
        df.to_excel(output_file, index=False)
        logging.info(f"解析完成，结果已保存到: {output_file}")
    except PermissionError:
        # 如果没有权限，保存到当前目录
        current_dir_output = os.path.join(os.getcwd(), "report_analysis.xlsx")
        df.to_excel(current_dir_output, index=False)
        logging.info(f"原路径无写入权限，结果已保存到: {current_dir_output}")
    
    logging.info(f"共处理 {len(results)} 个文档")

if __name__ == "__main__":
    # 指定目录和输出文件
    directory_path = r"F:\apk20250716\report"
    output_file = r"F:\apk20250716\report_analysis.xlsx"
    
    # 处理目录
    process_directory(directory_path, output_file) 